import ViewBase from "./ViewBase";
import LDataCannonManager from "../datas/LDataCannonManager";
import CannonManager from "../manager/CannonManager";
import CannonCtr from "../CannonCtr";
import UIManager from "../manager/UIManager";
import Define from "../common/Define";
import Common from "../common/Common";
import SelectCannonItem from "../SelectCannonItem";
import UserInfo from "../UserInfo";
import WXHelper from "../common/WXHelper";
import GameManager from "../manager/GameManager";
import LDataCannon from "../datas/LDataCannon";
import SelectSceneItem from "../SelectSceneItem";
import LDataSceneManager from "../datas/LDataSceneManager";
import ResManager from "../manager/ResManager";
import LDataScene from "../datas/LDataScene";

// Learn TypeScript:
//  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/typescript.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
//  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html

const {ccclass, property} = cc._decorator;

class ScrollInfo{
    index:number;
    data:LDataScene;
    offsetX:number;
    distanceX:number;
    constructor(index:number,offsetX:number,data:LDataScene){
        this.index = index;
        this.offsetX = offsetX;
        this.data = data;
    }
}

@ccclass
export default class SelectCannonViewCtr extends ViewBase {

    @property(cc.ScrollView)
    scrollView: cc.ScrollView = null;

    @property(cc.Node)
    nodeContent: cc.Node = null;

    @property(cc.Node)
    eventContent: cc.Node = null;

    @property(cc.Node)
    btn_back: cc.Node = null;

    @property(cc.Node)
    btn_video: cc.Node = null;

    @property(cc.Node)
    btn_use: cc.Node = null;

    @property(cc.Node)
    btn_share: cc.Node = null;

    @property(cc.Node)
    node_item: cc.Node = null;

    maxCount:number = 0;
    curCount:number = 0;

    scrollInfoArr:ScrollInfo[] = [];
    itemArr:SelectSceneItem[] = [];

    isCanAutoScroll:boolean = false
    scrollState:number = 0;

    curSelectIndex:number;
    isClickShare:boolean = false;

    sceneId:number = 0;

    refreshView(isFristRefresh:boolean = false){
        this.isClickShare = false
        this.scrollView.scrollTo(new cc.Vec2(0,150),0)
        console.log("UserInfo.getCurSceneIndex() = " + UserInfo.getCurSceneIndex())
        this.scrollToFitPos()
        this.scrollToIndex(UserInfo.getCurSceneIndex(),UserInfo.getCurSceneIndex())
        this.refreshItemState()
    }

    refreshItemState(){
        for (let index = 0; index < this.itemArr.length; index++) {
            this.itemArr[index].refreshItemInfoByData(LDataSceneManager.dataList[index]);       
        }
    }

    addEvent(){
        Common.addClickEvent(this.eventContent,this.onClick.bind(this),false);
        Common.addClickEvent(this.btn_back,this.onClick.bind(this));
        Common.addClickEvent(this.btn_use,this.onClick.bind(this));
        Common.addClickEvent(this.btn_video,this.onClick.bind(this));
        Common.addClickEvent(this.btn_share,this.onClick.bind(this));
        
    }
    
    onClick(tag:string){
        if(tag == "btn_back"){
            UIManager.getInstance().showView(Define.viewMain)
            UIManager.getInstance().showView(Define.viewUpgrade)
            UIManager.getInstance().hideView(Define.viewSelectScene)
        }else if(tag == "btn_use"){
            
            UserInfo.setCurUseSceneId(this.scrollInfoArr[0].data.saveID)
            GameManager.instance.changeSceneByIndex(UserInfo.getCurSceneIndex())
            UIManager.getInstance().showView(Define.viewMain)
            UIManager.getInstance().showView(Define.viewUpgrade)
            UIManager.getInstance().hideView(Define.viewSelectScene)
            
        }else if(tag == "btn_video"){
            WXHelper.showVideo(function(state){
                if(state == 1){
                    //播放成功奖励大炮
                   let data = this.scrollInfoArr[0].data
                   if(data != null && data.getmode == Define.cannonVideo){
                       UserInfo.addNewCannon(data.saveID,2);//获得一个新的场景
                       this.refreshButtonsState()
                       this.refreshItemState()
                   }
                }
            }.bind(this))
        }else if(tag == "btn_share"){
            GameManager.instance.wxHelper.shareAppMessage("")
            this.isClickShare = true
        }
    }

    initView(){

        this.maxCount = LDataSceneManager.dataList.length
        for (let index = 0; index < this.maxCount; index++) {
            let itemNode = cc.instantiate(this.node_item)
            itemNode.position =  new cc.Vec2(index*213 + 320,-150)
            itemNode.setParent(this.nodeContent)
            this.scrollInfoArr.push(new ScrollInfo(index,itemNode.position.x,LDataSceneManager.GetDataById(index)))
            let item:SelectSceneItem = itemNode.getComponent<SelectSceneItem>(SelectSceneItem);
            this.itemArr.push(item);
        }
        this.createScene(this.curCount);

        this.nodeContent.width =  213 * (this.maxCount + 2)

    }

    createScene(index){

        ResManager.loadPrefab("prefabs/scenes/ui_scene"+LDataSceneManager.GetDataById(this.curCount).saveID,function(prefab){
            let cannonNode = cc.instantiate(prefab);
            cannonNode.setParent(this.nodeContent.children[index].children[1])
            cannonNode.position = new cc.Vec2(0,112)
            cannonNode.setScale(0.8)
            this.curCount++
            if(this.curCount < this.maxCount){
                this.createScene(this.curCount)
            }

        }.bind(this));
    }
    //滑动到合适的位置
    scrollToFitPos(){

        let tempX = Math.abs(this.nodeContent.position.x)
        console.log(tempX);
        for (let index = 0; index < this.scrollInfoArr.length; index++) {
            this.scrollInfoArr[index].distanceX = Math.abs(this.scrollInfoArr[index].offsetX - tempX)
        }

        this.scrollInfoArr.sort((a, b) => {
            return a.distanceX - b.distanceX;
        });

        let tempIndex = this.scrollInfoArr[0].index;

        let state:number = UserInfo.getCannnonState(this.scrollInfoArr[0].data.saveID);
        if(state == 1){
            UserInfo.addNewCannon(this.scrollInfoArr[0].data.saveID,2) //这里更改查看过的状态
            this.refreshItemState()
        }
        this.scrollToIndex(tempIndex)
    }

    scrollToIndex(index,otherIndex:number = 0){
        this.curSelectIndex = index
        this.sceneId = this.scrollInfoArr[otherIndex].data.saveID
        this.scrollView.scrollTo(new cc.Vec2(this.curSelectIndex/(LDataSceneManager.dataList.length - 1),0),1)
        this.refreshButtonsState();

    }
    //刷新按键的状态
    refreshButtonsState(){
        this.btn_back.active = false
        this.btn_use.active = false
        this.btn_video.active = false
        this.btn_share.active = false


        if(UserInfo.isOwnCannonById(this.sceneId)){
            if(UserInfo.curSceneId == this.sceneId){
                this.btn_back.active = true
            }else{
                this.btn_use.active = true
            }
        }else{
            let data = this.scrollInfoArr[0].data
            if(data.getmode == Define.cannonVideo && WXHelper.isLoadVideoSuccessful){
                this.btn_video.active = true
            }else if(data.getmode == Define.cannonShare){
                this.btn_share.active = true
            }
            else{
                this.btn_back.active = true
            }
        }
    }

    update(dt){
        
        if(this.scrollView.isScrolling()){
           this.scrollState = 1
        }else{
            if(this.scrollState == 1){
                this.scrollState = 0
                this.scrollToFitPos()
            }
        }
    }

    executeEvent(eventTag:string = "defualt"){
        let tempData:LDataScene =  this.scrollInfoArr[0].data
        if(tempData != null && tempData.getmode == Define.cannonShare){
            UserInfo.addNewCannon(tempData.saveID,2);//获得一个新的大炮 分享获得大炮
            this.refreshButtonsState()
            this.refreshItemState()
        }
    }
}
